YAHOO.namespace('Osimac.calificacion');

YAHOO.Osimac.calificacion.calificacionTable = function(elContainer, messages, listado) {
    this.messages = messages;
    this.listado = listado;
    YAHOO.Osimac.calificacion.calificacionTable.superclass.constructor.call(this, elContainer,
    this.construirColumnDefs(), this.construirDataSource(), this.construirConfig());
};

YAHOO.lang.extend(YAHOO.Osimac.calificacion.calificacionTable, YAHOO.Osimac.ListTableBase, {
    
    revisarAtencion: function (nroAtencion,preRadio){
     calificacionDialog = new YAHOO.Osimac.dialog.Calificacion('calificacionDialog',
            Osinergmin.contextPath + '/pages/calificacion/calificar?nroAtencion=' + nroAtencion+"&preRadio="+preRadio);
        calificacionDialog.show();
    },
    verAtencion: function (nroAtencion){
        calificacionDialog = new YAHOO.Osimac.dialog.Calificacion('calificacionDialog',
            Osinergmin.contextPath + '/pages/calificacion/ver?nroAtencion=' + nroAtencion);
        calificacionDialog.show();
    },
    conformeAtencion: function (idCalificacion,nroAtencion){
        var self=this;
        $.getJSON("calificacion/correcto", {idCalificacion: idCalificacion, nroAtencion:nroAtencion}, function(response, textStatus) {
              if (response.error){
                  mensajeValidacion("Error al registrar calificación");
                  return;
              }
             self.actualizaFila(nroAtencion,idCalificacion);
        });

    },
    doBeforeLoadData: function(oRequest, oResponse, oPayload) {
        oPayload.totalRecords = oResponse.meta.totalRecords;
        oPayload.pagination.recordOffset = oResponse.meta.startIndex;
        $("#cantidadRegistros").html(messages.calificacionTable.totalRegistros +" "+oPayload.totalRecords);
        return oPayload;
    },
    correctoFormatter: function(liner, record, column, data) {
        if (data!=null){
            if (!data) {
                liner.innerHTML = 'No';
            } else {
                liner.innerHTML = 'Sí';
            }
        }
    },
     cantRespuestasFormatter: function (liner,record,column,data){
        var self = this;
        var linerElement = new YAHOO.util.Element(liner);
        if (data>1){
            linerElement.get('element').innerHTML ="<div class='nResp'><a href='#'>"+data+"</a></div>"

             linerElement.delegate('click', function() {
                var nroAtencion = record.getData("nroAtencion");
                self.verAtencion(nroAtencion);
            }, '.nResp');
        }else{
            linerElement.get('element').innerHTML =data;
        }
    },
     accionesFormatter: function(liner, record, column, data) {
        var self = this;
        var linerElement = new YAHOO.util.Element(liner);
        var checkSi="";
        var checkNo="";
        var idRadio=record.getData("nroAtencion");
        var idCalificacion=record.getData("idCalificacion");
        var corrJor="";

        if (record.getData("correcto")!=null){
            if (record.getData("correcto")){
                checkSi="checked";
            }else{
                 checkNo="checked";
            }
        }

        if (record.getData("cantidadRespuestas")>1){
            var icono="editar";
            if (/*(record.getData("correcto")!=null) ||*/ (record.getData("correctoJOR")!=null)){
                icono="revisado";
                if (record.getData("correctoJOR")){
                    corrJor="Sí";
                }else{
                    corrJor="No";
                }
            }
            linerElement.get('element').innerHTML =
            "<table style='margin-left:auto; margin-right:auto; width: 50px; border:0px !important;'><tr><td>"+corrJor+"</td><td><div class='"+icono+"' id='"+idRadio+"Icon'></div></td></tr></table>";

             linerElement.delegate('click', function() {
                var nroAtencion = record.getData("nroAtencion");
                self.revisarAtencion(nroAtencion,1);
            }, '.editar');

             linerElement.delegate('click', function() {
                var nroAtencion = record.getData("nroAtencion");
                self.verAtencion(nroAtencion);
            }, '.revisado');

        }else{
            if ((record.getData("correcto")==null)|| (record.getData("correctoJOR")==null)){
                if (record.getData("correctoJOR")==null){
                    checkNo="";
                    checkSi="";                
                }
                
                linerElement.get('element').innerHTML =
                "<table style='margin-left:auto; margin-right:auto; width: 50px; border:0px !important;'><tr><td>"+
                "<div id='radios"+idRadio+"'>"+
                "<div class='si'><input type='radio' name='"+idRadio+"' id='"+idRadio+"' value='1' "+checkSi+" > Sí </div>"+
                "<div class='no'><input type='radio' name='"+idRadio+"' id='"+idRadio+"' value='0' "+checkNo+"> No </div>"+
                "</div>"+
                "</td></tr></table>";
                linerElement.delegate('click', function() {
                    var nroAtencion = record.getData("nroAtencion");
                    var preRadio=0;
                    self.revisarAtencion(nroAtencion,preRadio);
                }, '.no');

                linerElement.delegate('change', function() {
                    var idCalificacion = record.getData("idCalificacion");
                    var nroAtencion = record.getData("nroAtencion");
                    self.conformeAtencion(idCalificacion,nroAtencion);
                }, '.si');
            }else{
                if (record.getData("correctoJOR")){
                    corrJor="Sí";
                }else{
                    corrJor="No";
                }
                linerElement.get('element').innerHTML =
                "<table style='margin-left:auto; margin-right:auto; width: 50px; border:0px !important;'><tr><td>"+corrJor+"</td><td><div class='revisado' id='"+idRadio+"Icon'></div></td></tr></table>";
                linerElement.delegate('click', function() {
                    var nroAtencion = record.getData("nroAtencion");
                    self.verAtencion(nroAtencion);
                }, '.revisado');
            }

        }


    },
    construirColumnDefs: function() {
        return [
          
            {
                key: 'nroAtencion',
                resizeable: true,
                minWidth: 30,
                label: this.messages.calificacionTable.columna.nroAtencion
            },
            
            {
                key: 'tema',
                resizeable: true,
                minWidth: 400,
                label: this.messages.calificacionTable.columna.tema
            },
            {
                key: 'necesidad',
                resizeable: true,
                minWidth: 900,
                label: this.messages.calificacionTable.columna.necesidad
            },
            {
                key: 'respuesta',
                resizeable: true,
                minWidth: 900,
                label: this.messages.calificacionTable.columna.respuesta
            },
            {
                key: 'cantidadRespuestas',
                label: this.messages.calificacionTable.columna.cantidad,
                formatter: this.cantRespuestasFormatter
            },
            {
                key: 'fechaRegistro',
                resizeable: true,
                minWidth: 300,
                label: this.messages.calificacionTable.columna.fecha
            },
            {
                key: 'correcto',
                resizeable: true,
                label: this.messages.calificacionTable.columna.correcto,
                formatter: this.correctoFormatter
            },
            {
                key: 'observacion',
                resizeable: true,
                minWidth: 300,
                label: this.messages.calificacionTable.columna.observacion
            },
            {
                key: 'acciones',
                label: this.messages.calificacionTable.columna.conforme,
                minWidth: 70,
                maxWidth: 70,
                className: 'accionesColumn',
                formatter: this.accionesFormatter
            },
            {
                key: 'idCalificacion',
                hidden: true
            },{
                key:'correctoJOR',
                hidden:true
            }
        ];
    },
    construirDataSource: function() {
        var forceIERequest = new Date().getTime();
        var dataSource = new YAHOO.util.XHRDataSource(Osinergmin.contextPath + "/pages/calificacion/find?fie=" + forceIERequest+"&");
        dataSource.responseType = YAHOO.util.DataSource.TYPE_JSON;


        dataSource.responseSchema = {
            resultsList: "lstAtencionesDTO",
            metaFields: {
                totalRecords: "totalRecords",
                startIndex: "startIndex"
            },
            fields: [ {key: 'nroAtencion'}, {key: 'tema'}, {key:'fechaRegistro'},{key: 'necesidad'},{key:'respuesta'},{key:'correcto'},{key:'idCalificacion'} ,{key:'observacion'},{key:'correctoJOR'},{key:'cantidadRespuestas'}]
        };

        return dataSource;
    },
    construirConfig: function() {

        return {
            MSG_LOADING: 'Cargando...',
            MSG_EMPTY :'No se encontraron datos.',
            MSG_ERROR: "Error cargando datos, es muy probable que la sesión haya expirado.. <a href='" + Osinergmin.contextPath + "/pages/public/login'>Haga clic aquí para volver a acceder al sistema.</a>",
            generateRequest: this.generarRequest,
            initialLoad: false,
            initialRequest:this.generarRequest(),
            dynamicData: true,
            paginator : new YAHOO.widget.Paginator({
                rowsPerPage: this.messages.calificacionTable.paginacion.filasxpagina,
                containers:  "calificacionPaginator", //contenedor
                firstPageLinkLabel: this.messages.calificacionTable.paginacion.inicio,
                lastPageLinkLabel: this.messages.calificacionTable.paginacion.fin,
                previousPageLinkLabel: this.messages.calificacionTable.paginacion.anterior,
                nextPageLinkLabel: this.messages.calificacionTable.paginacion.siguiente,
                pageLinkClass: 'pageLinkClass',
                template: "{FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink}"
            })
        }
    },
    generarRequest: function(oState, oSelf) {
      oState = oState || {
            pagination: null,
            sortedBy: null
        };

        var sort = (oState.sortedBy) ? oState.sortedBy.key : "nroAtencion";
        var dir = (oState.sortedBy && oState.sortedBy.dir === YAHOO.widget.DataTable.CLASS_DESC) ? "desc" : "asc";
        var startIndex = (oState.pagination) ? oState.pagination.recordOffset : 0;
        var results = (oState.pagination) ? oState.pagination.rowsPerPage : this.messages.calificacionTable.paginacion.filasxpagina;
        var idEstado =$('#idEstado').val();
        var codDependencia = $('#codDependencia').val();
        var fechaDesde = $('#fechaDesde').val();
        var fechaHasta = $('#fechaHasta').val();

       // var forceIERequest = new Date().getTime();

        return 'sort=' + sort +
               '&dir=' + dir +
               '&startIndex=' + startIndex +
               '&results=' + (startIndex + results) +
               '&idEstado=' + idEstado +
               '&codDependencia=' + codDependencia +
               '&fechaDesde=' + fechaDesde +
               '&fechaHasta=' +fechaHasta
               
    },
    recargarData: function() {
        var self = this;
            oCallback = {
                success: self.onDataReturnInitializeTable,
                failure: self.onDataReturnSetRows,
                scope: self,
                argument: self.getState()
            };
        self.getDataSource().sendRequest(self.generarRequest(), oCallback);
        
    },
    tieneRegistros: function(){
        return this.getRecordSet().getLength()>0;
    },
    actualizaFila: function(nroAtencion,idCalificacion){
        var self=this;
        $("#"+nroAtencion+"Icon").removeClass("editar").addClass("revisado");
        $("#radios"+nroAtencion).html("");
        $("#radios"+nroAtencion).addClass("revisado");
        $("#radios"+nroAtencion).click(function(){
           self.verAtencion(nroAtencion);
        });
    }
   
});